//
//  IFAARegister.h
//  esand_cloud_ifaa
//
//  Created by ReidLee on 2018/6/15.
//  Copyright © 2018年 esandinfo. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "IFAAResult.h"
#import "IFAABaseInfo.h"
#import "IFAACommon.h"

/**
 * IFAA 注册类
 */
@interface IFAARegister : NSObject

/**
 * 初始化函数
 - param
    - baseInfo IFAA 执行上下文 `IFAABaseInfo`
 */
- (id)initWithIFAABaseInfo:(IFAABaseInfo *) baseInfo;

/**
 * 注册初始化
 - return `IFAAResult`
     <table border="1">
         <tr>
             <th>可能的错误码</th>
             <th>内容</th>
             <th>备注</th>
         </tr>
         <tr>
             <td>"19"</td>
             <td>错误描述</td>
             <td>当前应用未获取Face ID权限</td>
         </tr>
         <tr>
             <td>"7"</td>
             <td>错误描述</td>
             <td>锁屏密码没设置</td>
         </tr>
         <tr>
             <td>"4"</td>
             <td>错误描述</td>
             <td>设备尚未录入任何指纹，此处可引导用户跳转到指纹界面录入指纹后再做注册处理</td>
         </tr>
         <tr>
             <td>"0"</td>
             <td>注册请求的报文数据</td>
             <td>此数据需要发送到bizServer服务器，请求注册</td>
         </tr>
     </table>
 */
- (IFAAResult *) regInit;
- (IFAAResult *) regInit:(NSString *)action;

/**
 * 执行注册操作
 - param
    - msg 服务器返回的报文数据
    - ifaaCallback  回调的 IFAAResult 参数可能有如下内容 `IFAACallback`
     <table border="1">
         <tr>
             <th>可能的错误码</th>
             <th>内容</th>
             <th>备注</th>
         </tr>
         <tr>
             <td>"9"</td>
             <td>错误描述</td>
             <td>返回的报文数据异常</td>
         </tr>
         <tr>
             <td>"8"</td>
             <td>异常信息</td>
             <td>异常信息有如下几种
                 <ul>
                     <li>RESULT_NOT_SUPPORT</li>
                     <li>RESULT_SYSTEM_CANCEL</li>
                     <li>RESULT_PASSCODE_NOTSET</li>
                     <li>RESULT_NOT_AVAILABLE</li>
                     <li>RESULT_TOUCHID_ERRO</li>
                     <li>RESULT_JAILBREAK</li>
                     <li>RESULT_WRONG_PARAM</li>
                     <li>RESULT_UNKNOWN</li>
                 </ul>
             </td>
         </tr>
         <tr>
             <td>"8"</td>
             <td>错误描述</td>
             <td>进程抢占</td>
         </tr>
         <tr>
             <td>"12"</td>
             <td>错误描述</td>
             <td>本地认证操作已被取消</td>
         </tr>
         <tr>
             <td>"14"</td>
             <td>错误描述</td>
             <td>系统验证失败</td>
         </tr>
         <tr>
             <td>"15"</td>
             <td>错误描述</td>
             <td>连续多次校验失败，校验被暂时锁定</td>
         </tr>
         <tr>
             <td>"16"</td>
             <td>错误描述</td>
             <td>本地认证操作已被取消并跳转到其他操作</td>
         </tr>
         <tr>
             <td>"0"</td>
             <td>需要同步到服务器的报文数据 </td>
             <td>数据经过签名，可保证不会被篡改</td>
         </tr>
     </table>
 
 ```c
 typedef enum {
 
     RESULT_NOT_SUPPORT,         //系统版本低于iOS8
     RESULT_SYSTEM_CANCEL,       //被其他进程抢占，如来电
     RESULT_PASSCODE_NOTSET,     //passcode未设置
     RESULT_NOT_ENROLLED,        //未录入指纹
     RESULT_TOUCHID_ERRO,        //系统指纹异常
     RESULT_JAILBREAK,           //该机器越狱 (此状态码不可用)
     RESULT_WRONG_PARAM,         //参数不对
     RESULT_UNKNOWN,             //其他异常
 } IFAABioResult;
 ```
 */
- (void) register:(NSString *)msg ifaaCallback:(IFAACallback) ifaaCallback;

/**
 * 结束注册操作
 - param
    - msg 服务器返回的注册报文
 - eturn
     <table border="1">
         <tr>
             <th>可能的错误码</th>
             <th>内容</th>
             <th>备注</th>
         </tr>
         <tr>
             <td>"9"</td>
             <td>错误描述</td>
             <td>解析服务器返回的报文发生异常</td>
         </tr>
         <tr>
             <td>"0"</td>
             <td>注册的 token</td>
             <td>表明注册成功了</td>
         </tr>
     </table>
 */
- (IFAAResult *) regFinish:(NSString *) msg;
@end
